home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Collections: New Zealand Amiga Users Group
/
New Zealand Amiga Users Group Newsdisk v25 (1989-08)(NZAmigaUG).zip
/
New Zealand Amiga Users Group Newsdisk v25 (1989-08)(NZAmigaUG).adf
/
Strink
/
strink.c
< prev
next >
Wrap
C/C++ Source or Header
|
1993-12-03
|
10KB
|
367 lines
/*
Strink.c
This is a simple program which opens a window with a close gadget
and a strink gadget which will make the window strink to an icon.
by
David Annett
3 Sutherland Ave,
Upper Hutt,
New Zealand.
© 25 June 1989
*/
#include "exec/types.h"
#include <exec/memory.h>
#include "graphics/gfx.h"
#include "libraries/dos.h"
#include "intuition/intuition.h"
#include "proto/graphics.h"
#include "proto/exec.h"
#include "proto/intuition.h"
#include "proto/dos.h"
extern struct Library *OpenLibrary();
extern VOID CloseLibrary ();
USHORT *TempPtr, *StrinkDatPtr, StrinkData []=
{
0xFFFF,
0xFC3F,
0xFC3F,
0xFC3F,
0xC003,
0xF00F,
0xFC3F,
0xFFFF,
/**/
0x0000,
0x03C0,
0x03C0,
0x03C0,
0x3FFC,
0x0FF0,
0x03C0,
0x0000
};
struct Image StrinkImage =
{
0,0, /* left, top */
16,8,2, /* width, height, depth */
&StrinkData[0], /* image data set by program */
0x3,0x0, /* Plane Pick, Plane On Off */
NULL /* Next Image */
};
#define IconXsize 79
#define IconYsize 56
USHORT *IconDatPtr, IconData []=
{
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
0xFBEF, 0xFFFF, 0x7FFF, 0xFFFF, 0xFFFF,
0xFBEF, 0xFFFF, 0x7FFF, 0xFFFF, 0xFFFF,
0xFDE1, 0xBD83, 0x0DEE, 0x383F, 0xFFFF,
0xFEEF, 0xBD7F, 0x7DED, 0xF77F, 0xFFFF,
0xFF6F, 0xBD7F, 0x7DED, 0xF6FF, 0xFFFF,
0xFF6F, 0xBD7F, 0x7DED, 0xF7FF, 0xFFFF,
0xF0F1, 0xC383, 0x8E1D, 0xF83F, 0xFFFF,
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
0xFFFF, 0x82E8, 0x2E82, 0x0831, 0xBBFF,
0xFFFF, 0xEE6E, 0xEEEF, 0xBEEE, 0x9BFF,
0xFFFF, 0xEEAE, 0xEEEF, 0xBEEE, 0xABFF,
0xFFFF, 0xEECE, 0xEEEF, 0xBEEE, 0xB3FF,
0xFFFF, 0x82EE, 0xF183, 0xB831, 0xBBFF,
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
0xFFFF, 0xC61C, 0x61BA, 0x0C70, 0xFFFF,
0xFFFF, 0xBEEB, 0xAEBB, 0xBBAF, 0xFFFF,
0xFFFF, 0xA218, 0x2183, 0xBBF1, 0xFFFF,
0xFFFF, 0xBADB, 0xAFBB, 0xBBBE, 0xFFFF,
0xFFFF, 0xC6EB, 0xAFBA, 0x0C61, 0xFFFF,
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
0xFFFF, 0x82E8, 0x31FF, 0xFFFF, 0xFFFF,
0xFFFF, 0xBF5B, 0xEEFF, 0xFFFF, 0xFFFF,
0xFFFF, 0x87B8, 0x6FFF, 0xFFFF, 0xFFFF,
0xFFFF, 0xBF5B, 0xEEFF, 0xFFFF, 0xFFFF,
0xFFFF, 0x82E8, 0x31FF, 0xFFFF, 0xFFFF,
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
0xFFFF, 0x871B, 0xA1C7, 0x183F, 0xFFFF,
0xFFFF, 0xBAE9, 0x2EBA, 0xEEFF, 0xFFFF,
0xFFFF, 0x86EA, 0xA1BA, 0xEEFF, 0xFFFF,
0xFFFF, 0xB6EB, 0xAEBA, 0xEEFF, 0xFFFF,
0xFFFF, 0xBB1B, 0xA0C7, 0x1EFF, 0xFFFF,
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
0xFFFF, 0x82E8, 0x71BB, 0x0831, 0xBBFF,
0xFFFF, 0xBF5B, 0xAE9A, 0xFEEE, 0x9BFF,
0xFFFF, 0x87B8, 0x60AB, 0x1EEE, 0xABFF,
0xFFFF, 0xBF5B, 0xEEB3, 0xEEEE, 0xB3FF,
0xFFFF, 0x82EB, 0xEEBA, 0x1831, 0xBBFF,
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
0xFF86, 0x182E, 0xFFFF, 0x7630, 0xC1FF,
0xFFBA, 0xEBEE, 0xFFFF, 0x25D7, 0x5FFF,
0xFF86, 0x1875, 0xFFFF, 0x55D0, 0xC3FF,
0xFFBE, 0xDBF5, 0xFFFF, 0x75D6, 0xDFFF,
0xFFBE, 0xE83B, 0xFFFF, 0x7637, 0x41FF,
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
/* Second bit plane */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0410, 0x0000, 0x8000, 0x0000, 0x0000,
0x0410, 0x0000, 0x8000, 0x0000, 0x0000,
0x021E, 0x427C, 0xF211, 0xC7C0, 0x0000,
0x0110, 0x4280, 0x8212, 0x0880, 0x0000,
0x0090, 0x4280, 0x8212, 0x0900, 0x0000,
0x0090, 0x4280, 0x8212, 0x0800, 0x0000,
0x0F0E, 0x3C7C, 0x71E2, 0x07C0, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x7D17, 0xD17D, 0xF7CE, 0x4400,
0x0000, 0x1191, 0x1110, 0x4111, 0x6400,
0x0000, 0x1151, 0x1110, 0x4111, 0x5400,
0x0000, 0x1131, 0x1110, 0x4111, 0x4C00,
0x0000, 0x7D11, 0x0E7C, 0x47CE, 0x4400,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x39E3, 0x9E45, 0xF38F, 0x0000,
0x0000, 0x4114, 0x5144, 0x4450, 0x0000,
0x0000, 0x5DE7, 0xDE7C, 0x440E, 0x0000,
0x0000, 0x4524, 0x5044, 0x4441, 0x0000,
0x0000, 0x3914, 0x5045, 0xF39E, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x7D17, 0xCE00, 0x0000, 0x0000,
0x0000, 0x40A4, 0x1100, 0x0000, 0x0000,
0x0000, 0x7847, 0x9000, 0x0000, 0x0000,
0x0000, 0x40A4, 0x1100, 0x0000, 0x0000,
0x0000, 0x7D17, 0xCE00, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x78E4, 0x5E38, 0xE7C0, 0x0000,
0x0000, 0x4516, 0xD145, 0x1100, 0x0000,
0x0000, 0x7915, 0x5E45, 0x1100, 0x0000,
0x0000, 0x4914, 0x5145, 0x1100, 0x0000,
0x0000, 0x44E4, 0x5F38, 0xE100, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x7D17, 0x8E44, 0xF7CE, 0x4400,
0x0000, 0x40A4, 0x5165, 0x0111, 0x6400,
0x0000, 0x7847, 0x9F54, 0xE111, 0x5400,
0x0000, 0x40A4, 0x114C, 0x1111, 0x4C00,
0x0000, 0x7D14, 0x1145, 0xE7CE, 0x4400,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x03FF, 0xFFFF, 0xC003, 0xFFFF, 0xFFC0,
0x0386, 0x182E, 0xC003, 0x7630, 0xC1C0,
0x03BA, 0xEBEE, 0xC003, 0x25D7, 0x5FC0,
0x0386, 0x1875, 0xC003, 0x55D0, 0xC3C0,
0x03BE, 0xDBF5, 0xC003, 0x75D6, 0xDFC0,
0x03BE, 0xE83B, 0xC003, 0x7637, 0x41C0,
0x03FF, 0xFFFF, 0xC003, 0xFFFF, 0xFFC0,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000
};
struct Image IconImage =
{
0,0, /* left, top */
IconXsize,IconYsize,2, /* width, height, depth */
&StrinkData[0], /* image data set by program */
0x3,0x0, /* Plane Pick, Plane On Off */
NULL /* Next Image */
};
struct Gadget StrinkGadget =
{
NULL, /* Next gadget */
0,-8,16,8, /* left, top, width, height */
GADGHCOMP|GADGIMAGE|GRELBOTTOM, /* flags */
RELVERIFY, /* activation flags */
BOOLGADGET, /* gadget type */
&StrinkImage, /* gadget render */
NULL, /* select render */
NULL, /* gadget's IntuiText */
NULL, /* mutual exclude */
NULL, /* special info */
NULL, /* gadget id */
NULL /* user data */
};
struct Gadget IconGadget =
{
NULL, /* Next gadget */
0,0,0,0, /* left, top, width, height */
GADGHCOMP|GADGIMAGE|GRELWIDTH|GRELHEIGHT, /* flags */
GADGIMMEDIATE, /* activation flags */
WDRAGGING, /* gadget type */
&IconImage, /* gadget render */
NULL, /* select render */
NULL, /* gadget's IntuiText */
NULL, /* mutual exclude */
NULL, /* special info */
NULL, /* gadget id */
NULL /* user data */
};
struct NewWindow nw={
180,20,
200,40,
0,1,
CLOSEWINDOW | GADGETUP,
WINDOWDEPTH|WINDOWCLOSE|WINDOWDRAG|WINDOWSIZING|SMART_REFRESH,
&StrinkGadget,
NULL,
"Strink",
NULL,
NULL,
10,20,
640,256,
WBENCHSCREEN};
struct NewWindow iw={
100,100,
IconXsize,IconYsize,
0,1,
GADGETDOWN,
BORDERLESS|SMART_REFRESH,
&IconGadget,
NULL,
NULL,
NULL,
NULL,
0,0,0,0,
WBENCHSCREEN};
struct Window *w;
struct RastPort *rp;
struct IntuiMessage *wmsg, *iwmsg;
extern void CleanUp();
extern void StrinkWindow();
void main()
{
ULONG Count, mClass;
if(!(IntuitionBase=(struct IntuitionBase *)
OpenLibrary("intuition.library",0)))
CleanUp();
if(!(GfxBase=(struct GfxBase *)OpenLibrary("graphics.library",0)))
CleanUp();
if(!(StrinkDatPtr=(APTR)AllocMem(sizeof(StrinkData),MEMF_CHIP))) CleanUp();
TempPtr = StrinkDatPtr;
for (Count = 0;Count < sizeof(StrinkData)/2;Count++)
{
*TempPtr++ = StrinkData[Count];
}
StrinkImage.ImageData = StrinkDatPtr;
if(!(IconDatPtr=(APTR)AllocMem(sizeof(IconData),MEMF_CHIP))) CleanUp();
TempPtr = IconDatPtr;
for (Count = 0;Count < sizeof(IconData)/2;Count++)
{
*TempPtr++ = IconData[Count];
}
IconImage.ImageData = IconDatPtr;
if(!(w=(struct Window *)OpenWindow(&nw))) CleanUp();
mClass = INTUITICKS;
while (mClass != CLOSEWINDOW)
{
(void) Wait (1<<w->UserPort->mp_SigBit);
if ((wmsg = (struct IntuiMessage *)GetMsg (w->UserPort)) != NULL)
{
mClass = wmsg->Class;
ReplyMsg ((struct Message *)wmsg);
#ifdef DEBUG
printf ("\nMessage %d\n",mClass);
#endif
switch (mClass)
{
case GADGETUP:
StrinkWindow ();
break;
}
}
}
while ((wmsg = (struct IntuiMessage *)GetMsg (w->UserPort)) != NULL)
{
ReplyMsg ((struct Message *)wmsg);
}
CleanUp();
}
void CleanUp()
{
if (StrinkDatPtr) FreeMem(StrinkDatPtr,(ULONG)sizeof(StrinkData));
if (IconDatPtr) FreeMem(IconDatPtr,(ULONG)sizeof(IconData));
if (w) CloseWindow(w);
if (IntuitionBase) CloseLibrary((struct Library *)IntuitionBase);
if (GfxBase) CloseLibrary((struct Library *)GfxBase);
exit(0);
}
void StrinkWindow()
{
ULONG imClass, mSecs, mMicros, oSecs, oMicros;
BOOL DoubleClicked;
while ((wmsg = (struct IntuiMessage *)GetMsg (w->UserPort)) != NULL)
{
ReplyMsg ((struct Message *)wmsg);
}
nw.LeftEdge = w->LeftEdge;
nw.TopEdge = w->TopEdge;
nw.Width = w->Width;
nw.Height = w->Height;
CloseWindow(w);
if(!(w=(struct Window *)OpenWindow(&iw))) CleanUp();
imClass = INTUITICKS;
DoubleClicked = FALSE;
oSecs = 0;
oMicros = 0;
while (!DoubleClicked)
{
(void) Wait (1<<w->UserPort->mp_SigBit);
if ((iwmsg = (struct IntuiMessage *)GetMsg (w->UserPort)) != NULL)
{
imClass = iwmsg->Class;
mSecs = iwmsg->Seconds;
mMicros = iwmsg->Micros;
ReplyMsg ((struct Message *)iwmsg);
if (imClass = GADGETDOWN)
{
DoubleClicked = DoubleClick (oSecs,oMicros,mSecs,mMicros);
oSecs = mSecs;
oMicros = mMicros;
}
#ifdef DEBUG
printf ("\nIcon Message %d\n",imClass);
#endif
}
}
while ((iwmsg = (struct IntuiMessage *)GetMsg (w->UserPort)) != NULL)
{
ReplyMsg ((struct Message *)iwmsg);
}
iw.LeftEdge = w->LeftEdge;
iw.TopEdge = w->TopEdge;
iw.Width = w->Width;
iw.Height = w->Height;
CloseWindow(w);
if(!(w=(struct Window *)OpenWindow(&nw))) CleanUp();
}